#include <bits/stdc++.h>
using namespace std;
int main()
{
    // vector<int> v = {1, 2, 2, 3, 3, 3, 4, 5};
    // vector<int> v2 = {1, 2, 2};

    // binary_search:二分，返回bool
    // cout << binary_search(v.begin(), v.end(), 2) << endl;

    // includes:查找子序列，返回bool
    // cout << includes(v.begin(), v.end(), v2.begin(), v2.end()) << endl;

    // lower_bound:查找大于等于某个元素的元素
    // cout << *lower_bound(v.begin(), v.end(), 2) << endl;
    // upper_bound:查找大于某个元素的元素
    // cout << *upper_bound(v.begin(), v.end(), 2) << endl;

    // equal_range:返回等于给定值的所有元素构成的区间
    // auto pair = equal_range(v.begin(), v.end(), 3);
    // cout << distance(v.begin(), pair.first) << endl;
    // cout << distance(v.begin(), pair.second) << endl;
    // cout << distance(pair.first, pair.second) << endl;

    // vector<int> v1 = {1, 2, 3};
    // vector<int> v2 = {2, 3, 4};
    // vector<int> result;
    // result.resize(v1.size() + v2.size());

    // set_union:并集
    // set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), result.begin());
    // for_each(result.begin(), result.end(), [](int &a)
    //          { cout << a << " "; });

    // set_intersection：交集
    //  set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), result.begin());
    //  for_each(result.begin(), result.end(), [](int &a)
    //           { cout << a << " "; });

    // set_difference:位于第一区间但不位于第二区间的所有元素，形成一个有序区间
    // set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), result.begin());
    // for_each(result.begin(), result.end(), [](int &a)
    //          { cout << a << " "; });

    // set_symmetric_difference:补集
    // set_symmetric_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), result.begin());
    // for_each(result.begin(), result.end(), [](int &a)
    //          { cout << a << " "; });

    // inplace_merge:
    vector<int> v = {1, 2, 3, 1, 2, 4};
    inplace_merge(v.begin(), v.begin() + 3, v.end());
    for_each(v.begin(), v.end(), [](int &a)
             { cout << a << " "; });
    return 0;
}